home *** CD-ROM | disk | FTP | other *** search
- /* $XConsortium: XCrAssoc.c,v 10.18 94/04/17 20:11:34 rws Exp $ */
- /*
-
- Copyright (c) 1985 X Consortium
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
- Except as contained in this notice, the name of the X Consortium shall not be
- used in advertising or otherwise to promote the sale, use or other dealings
- in this Software without prior written authorization from the X Consortium.
-
- */
-
- #include "Xlibint.h"
- #include "X10.h"
-
- /*
- * XCreateAssocTable - Create an XAssocTable. The size argument should be
- * a power of two for efficiency reasons. Some size suggestions: use 32
- * buckets per 100 objects; a reasonable maximum number of object per
- * buckets is 8. If there is an error creating the XAssocTable, a NULL
- * pointer is returned.
- */
- XAssocTable *XCreateAssocTable(size)
- register int size; /* Desired size of the table. */
- {
- register XAssocTable *table; /* XAssocTable to be initialized. */
- register XAssoc *buckets; /* Pointer to the first bucket in */
- /* the bucket array. */
-
- /* XMalloc the XAssocTable. */
- if ((table = (XAssocTable *)Xmalloc(sizeof(XAssocTable))) == NULL) {
- /* XMalloc call failed! */
- errno = ENOMEM;
- return(NULL);
- }
-
- /* XMalloc the buckets (actually just their headers). */
- buckets = (XAssoc *)Xcalloc((unsigned)size, (unsigned)sizeof(XAssoc));
- if (buckets == NULL) {
- /* XCalloc call failed! */
- errno = ENOMEM;
- return(NULL);
- }
-
- /* Insert table data into the XAssocTable structure. */
- table->buckets = buckets;
- table->size = size;
-
- while (--size >= 0) {
- /* Initialize each bucket. */
- buckets->prev = buckets;
- buckets->next = buckets;
- buckets++;
- }
-
- return(table);
- }
-